﻿using System;
using B303Langf.Parser.AST;

namespace B303Langf.Parser
{
   public interface IVisitor
   {
      object VisitArrayIndexer( ArrayIndexer arrayIndexer, object args );
      object VisitArrayVariablePrimaryExpression( ArrayVariablePrimaryExpression arrayVariablePrimaryExpression, object args );
      object VisitBinaryExpression( BinaryExpression binaryExpression, object args );
      object VisitBlock( Block block, object args );
      object VisitBoolTypeDenoter( BoolTypeDenoter boolTypeDenoter, object args );
      object VisitBoolTypeLiteral( BoolTypeLiteral boolTypeLiteral, object args );
      object VisitDeclarations( Declarations declarations, object args );
      object VisitDeclarationStatement( DeclarationStatement declarationStatement, object args );
      object VisitExpressions( Expressions expressions, object args );
      object VisitExpressionStatement( ExpressionStatement expressionStatement, object args );
      object VisitForStatement( ForStatement forStatement, object args );
      object VisitFunctionCallPrimaryExpression( FunctionCallPrimaryExpression functionCallPrimaryExpression, object args );
      object VisitFunctionDeclaration( FunctionDeclaration functionDeclaration, object args );
      object VisitIdentifier( Identifier identifier, object args );
      object VisitIfStatement( IfStatement ifStatement, object args );
      object VisitIntegerTypeDenoter( IntegerTypeDenoter integerTypeDenoter, object args );
      object VisitIntegerTypeLiteral( IntegerTypeLiteral integerTypeLiteral, object args );
      object VisitOperator( Operator _operator, object args );
      object VisitOperatorModifiedExpressionPrimaryExpression( OperatorModifiedExpressionPrimaryExpression operatorModifiedExpressionPrimaryExpression, object args );
      object VisitParanthesisPrimaryExpression( ParanthesisPrimaryExpression paranthesisPrimaryExpression, object args );
      object VisitProgram( Program program, object args );
      object VisitReturnStatement( ReturnStatement returnStatement, object args );
      object VisitCharTypeDenoter( CharTypeDenoter stringTypeDenoter, object args );
      object VisitCharTypeLiteral( CharTypeLiteral stringTypeLiteral, object args );
      object VisitCharArrayTypeLiteral( CharArrayTypeLiteral charArrayTypeLiteral, object args );
      object VisitTypeLiteralPrimaryExpression( TypeLiteralPrimaryExpression typeLiteralPrimaryExpression, object args );
      object VisitVariableDeclaration( VariableDeclaration variableDeclaration, object args );
      object VisitVariableDeclarationWithDefinition( VariableDeclarationWithDefinition variableDeclarationWithDefinition, object args );
      object VisitVariablePrimaryExpression( VariablePrimaryExpression variablePrimaryExpression, object args );
      object VisitVoidTypeDenoter( VoidTypeDenoter voidTypeDenoter, object args );
      object VisitWhileStatement( WhileStatement whileStatement, object args );
      object VisitOutputStatement( OutputStatement outputStatement, object args );
      object VisitInputStatement( InputStatement inputStatement, object args );
   }
}